package com.cy.ragbase.dto;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import lombok.Data;
import java.io.IOException;
import java.util.List;

@Data
public class CodeRagRequest {
    /**
     * 用户的代码开发需求
     */
    private String requirement;
    
    /**
     * 期望的编程语言
     */
    private String targetLanguage;
    
    /**
     * 相关标签提示
     */
    private List<String> hints;
    
    /**
     * 返回参考代码数量
     */
    private int topK = 3;
    
    /**
     * 相似度阈值
     */
    private float threshold = 0.6f;
    
    /**
     * 代码生成风格
     */
    @JsonDeserialize(using = CodeStyleDeserializer.class)
    private CodeStyle codeStyle = CodeStyle.PRODUCTION;
    
    public enum CodeStyle {
        PRODUCTION,  // 生产级代码（完整、健壮）
        PROTOTYPE,   // 原型代码（快速实现）
        EDUCATIONAL  // 教学代码（详细注释）
    }
    
    /**
     * 自定义反序列化器，处理空字符串转换为默认枚举值
     */
    public static class CodeStyleDeserializer extends JsonDeserializer<CodeStyle> {
        @Override
        public CodeStyle deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
            String value = p.getValueAsString();
            if (value == null || value.trim().isEmpty()) {
                return CodeStyle.PRODUCTION; // 默认值
            }
            try {
                return CodeStyle.valueOf(value.toUpperCase());
            } catch (IllegalArgumentException e) {
                return CodeStyle.PRODUCTION; // 无效值时返回默认值
            }
        }
    }
} 